图像读取与显示

读取并显示raw格式文件

已知文件data1.raw是按照裸数据的形式保存的一张图片,图像大小512×512,像素存储的数据类型为float型,请编写代码将该图像读出,并以两种不同窗口窗位显示该图像。

使用fopen()打开文件

使用fread()float格式读取文件具体内容

使用fclose()关闭文件

% 本程序用于读取raw格式数据
clc,clear

% 读取raw数据
f1 = fopen('data1.raw','rb');
data = fread(f1,[512,512],'float');
fclose(f1);

使用subplot()构建二分隔

使用imshow()控制图像颜色范围

%% 绘制图窗
figure
subplot(1,2,1)
imshow(data,[])
title("data1.raw []")
subplot(1,2,2)
imshow(data,[0,0.5])
title("data1.raw [0,0.5]")
data1

读取并显示自定义格式文件

已知文件data2.abc以一种自定义格式的存储的一张图片。

文件分为两部分,第一部分是128个字节的文件头,第二部分是逐行存储的该图片的各个像素值。

在128个字节的文件头中,1-4字节按照int类型存储图像的宽,5-8字节按照int类型存储图像的高,第9个字节按照char类型存储数据类型的标识字。

关于数量类型标识字的定义如下:

void bit char unsigned char short unsigned short
0 1 2 3 4 5
int unsigned int long unsigned long float double
6 7 8 9 10 11

请编写代码将该图像读出,并以合适的窗口窗位显示该图像,另以伪彩色的形式显示该图像。

使用fopen()打开文件

使用fread()int格式读取文件具体内容,前八个字节用于存放尺寸信息,正好为两个int大小。指针指在第九个字节上,以char类型读取,为文件储存格式

使用fseek()跳转到129字节位置,以指定尺寸fsize 读取图像信息

使用fclose()关闭文件

%% 读取自定义数据
f2 = fopen('data2.abc','rb');
fsize = fread(f2,[1,2],'int');
fsize = [fsize(2),fsize(1)];
ftell(f2)
format = fread(f2,[1,1],'char');
ftell(f2)
switch format
 case 0
 str = 'void';
 case 1
 str = 'bit';
 case 2
 str = 'char';
 case 3
 str = 'unsigned char';
 case 4
 str = 'short';
 case 5
 str = 'unsigned short';
 case 6
 str = 'int';
 case 7
 str = 'unsigned int';
 case 8
 str = 'long';
 case 9
 str = 'unsigned long';
 case 10
 str = 'float';
 case 11
 str = 'double';
end

% 跳转到图像存储空间
fseek(f2,129,'bof');
ftell(f2)

data2= fread(f2,fsize,str);
fclose(f2);

使用imshow()显示图像

使用colormap为图像赋伪彩

%%
figure
imshow(data2,[]);
title("data2.abc")
figure
imshow(data2,[]);
colormap default;
title("data2.abc, colormap default")

data2-1data2